let arr = [1, 2, 3]

// 检查手里剩余的数字
// 选择其中一个填进坑里

function permute(nums) {
    let len = nums.length
    const current = []  //  记录当前排列的内容
    const res = []  //  记录所有可能的排列
    const vistied = {}
    function dfs(nth) {
        for (let i = 0; i < len; i++) {
            if (nth === len) {  //  找到一个排列
                res.push([...current])
                return
            }
            if (vistied[nums[i]]) {  // 如果此时遍历到的值上一个坑已经用过了，就跳过
                continue
            }
            current.push(nums[i])
            vistied[nums[i]] = true
            dfs(nth + 1)
            current.pop()
            vistied[nums[i]] = false  //  将此值标记为未使用过
        }
    }
    dfs(0)  // 从索引为0开始填数字

    return res
}
console.log(permute(arr));
